/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dio.com.model;

import dio.com.controller.*;
import dio.com.dao.conexao.AcessoCM;
import dio.com.model.bean.Meta;
import dio.com.model.bean.Movimento;
import dio.com.model.bean.Pendencia;
import dio.com.model.bean.Periodo;
import java.sql.Connection;
import java.util.List;

/**
 *
 * @author Diogenes
 */
public class Facade {

    //CRIAR OS ATRIBUTOS DAS INTERFACES DOS CONTROLADORES
    private static Facade instancia = null;
    private IMetasController fMetas = null;
    private IMovimentoesController fMovimentos = null;
    private IAnalisePendenciasController fAnalisePendencias = null;
    private AcessoCM mysql = null;
    private Connection con;

    public static Facade getInstancia() {
        if (instancia == null) {
            instancia = new Facade();
        }
        return instancia;
    }

    public Facade() {
        //INSTANCIAR OS CONTROLADORES DE ACORDO COM OS ATRIBUTOS
        fMetas = new MetasController();
        fMovimentos = new MovimentoController();
        fAnalisePendencias = new AnalisePendenciasController();
        mysql = new AcessoCM();
        con = mysql.conectar();
    }
    //TODOS OS MÉTODOS UTILIZANDO AS INTERFACES

    public List<Pendencia> analisarPendencias(Periodo p){
        return fAnalisePendencias.analisarPendencias(p);
    }
    
    public void salvarMovimento(Movimento movimento){
        fMovimentos.salvarMovimentos(movimento, mysql);
    }
    
    public void editarMovimento(Movimento movimento) {
        fMovimentos.editarMovimentos(movimento, mysql);
    }
    
    public boolean existeMovimento(Movimento movimento) {
        return fMovimentos.existeMovimentacao(movimento, mysql);
    }
    public List<Movimento> carregaMovimento(Movimento movimento){
        return fMovimentos.carregarMovimentos(movimento);
    }
    
    public void salvarMeta(Meta meta) {
        fMetas.salvarMeta(meta, con);
    }
    
    public void editarMeta(Meta meta) {
        fMetas.editarMeta(meta, con);
    }
    
    public boolean existeMeta(Meta meta) {
        return fMetas.existeMeta(meta, mysql);
    }
    public List<Meta> carregaMeta(Meta meta){
        return fMetas.carregarMetas(meta);
    }

    public void rollback(Connection con) {
        mysql.rollBack(con);
    }
    public void rollback() {
        mysql.rollBack();
    }

    public void commit() {
        mysql.commit(con);
    }
}
